#!/usr/bin/env node

const fs = require('fs');
const path = require('path');
const http = require('http');
const { exec } = require('child_process');

console.log('MCPRepoMarket VSCode插件开发环境检查...');

// 检查后端API是否可访问
function checkBackendAPI() {
  return new Promise((resolve) => {
    console.log('检查后端API是否可访问...');
    
    http.get('http://mcp.clouddragon.huawei.com/api/servers', (res) => {
      if (res.statusCode === 200) {
        console.log('✅ 后端API服务正常运行');
        resolve(true);
      } else {
        console.log(`❌ 后端API服务响应异常: ${res.statusCode}`);
        resolve(false);
      }
    }).on('error', (err) => {
      console.log(`❌ 无法连接到后端API服务: ${err.message}`);
      resolve(false);
    });
  });
}

// 检查api.ts中的API_BASE_URL设置
function checkAPIBaseURL() {
  const apiFilePath = path.join(__dirname, 'src', 'api.ts');
  if (!fs.existsSync(apiFilePath)) {
    console.log('❌ 找不到api.ts文件');
    return false;
  }

  const apiContent = fs.readFileSync(apiFilePath, 'utf8');
  const baseUrlMatch = apiContent.match(/API_BASE_URL\s*=\s*['"]([^'"]+)['"]/);
  
  if (!baseUrlMatch) {
    console.log('❌ 在api.ts中找不到API_BASE_URL设置');
    return false;
  }

  const currentBaseUrl = baseUrlMatch[1];
  console.log(`当前API_BASE_URL: ${currentBaseUrl}`);
  
  if (currentBaseUrl !== 'http://mcp.clouddragon.huawei.com/api') {
    console.log('❗ API_BASE_URL不是本地开发地址，建议修改为http://mcp.clouddragon.huawei.com/api');
    return false;
  }
  
  return true;
}

// 检查包依赖
function checkDependencies() {
  return new Promise((resolve) => {
    exec('npm list axios', (error, stdout, stderr) => {
      if (error) {
        console.log('❌ 缺少必要依赖，请运行npm install');
        resolve(false);
        return;
      }
      
      if (stdout.includes('axios@')) {
        console.log('✅ 依赖检查通过');
        resolve(true);
      } else {
        console.log('❌ 缺少axios依赖，请运行npm install');
        resolve(false);
      }
    });
  });
}

// 检查编译状态
function checkCompilation() {
  return new Promise((resolve) => {
    exec('npm run compile', (error, stdout, stderr) => {
      if (error) {
        console.log('❌ 编译失败');
        console.log(stderr);
        resolve(false);
        return;
      }
      
      console.log('✅ 编译成功');
      resolve(true);
    });
  });
}

// 打印帮助信息
function printHelp() {
  console.log('\n开发环境设置帮助:');
  console.log('1. 确保Django后端服务运行在 http://mcp.clouddragon.huawei.com');
  console.log('   - 切换到Django项目目录: cd ../mcphub-backend-django');
  console.log('   - 启动服务: python manage.py runserver');
  console.log('2. 安装依赖: npm install');
  console.log('3. 编译插件: npm run compile');
  console.log('4. 在VS Code中按F5启动调试会话');
  console.log('\n常见问题:');
  console.log('- 如果遇到API 404错误，请检查Django API路由配置');
  console.log('- 命令"authStatus.update"错误可能是VS Code扩展冲突，请尝试在干净的VS Code窗口中调试');
  console.log('- 确保API_BASE_URL设置正确: http://mcp.clouddragon.huawei.com/api');
}

// 主函数
async function main() {
  console.log('-------------------------------------');
  console.log('MCPRepoMarket VSCode插件开发环境设置');
  console.log('-------------------------------------');
  
  const apiUrlCorrect = checkAPIBaseURL();
  const dependenciesOk = await checkDependencies();
  const backendAvailable = await checkBackendAPI();
  
  console.log('\n检查结果汇总:');
  console.log(`API配置: ${apiUrlCorrect ? '✅ 正确' : '❌ 需要修正'}`);
  console.log(`依赖检查: ${dependenciesOk ? '✅ 通过' : '❌ 需要安装依赖'}`);
  console.log(`后端服务: ${backendAvailable ? '✅ 可访问' : '❌ 无法访问'}`);
  
  if (!apiUrlCorrect || !dependenciesOk || !backendAvailable) {
    console.log('\n⚠️ 存在一个或多个问题需要解决');
    printHelp();
  } else {
    const compileResult = await checkCompilation();
    if (compileResult) {
      console.log('\n🎉 所有检查通过！可以开始调试插件了');
      console.log('在VS Code中按F5启动调试会话');
    } else {
      console.log('\n⚠️ 编译失败，请修复编译错误');
      printHelp();
    }
  }
}

main().catch(error => {
  console.error('设置检查脚本出错:', error);
}); 